#include    "memory.h"
#include    "main.h"

/*****************************************************************************
 �� �� ��  : memcpy
 ��������  : ��һ���ڴ�����ݸ��Ƶ���һ���ڴ�
 �������  : *dst   Ŀ�ĵ�ַ
                *src   Դ��ַ
                    len    ����
 �������  : ��
 �� �� ֵ: ��
 �޸���ʷ    :
  1.��    ��   : 2019��03��03��
    ��    ��   : ΢Ц����
    �޸�����   : ����
*****************************************************************************/
void mem_cpy(INT8U *_dst, const INT8U *_src, INT16U _len)
{
    while(_len--)
    {
        *(_dst++) = *(_src++);
    }
}

/*****************************************************************************
 �� �� ��  : memset
 ��������  : ���ֽ�Ϊ��λ��_sָ����ڴ��n���ֽڸ�ֵΪ_ch
 �������  : *_s     Ŀ�ĵ�ַ
                  _ch     ��������
                         _len    ����
 �������  : ��
 �� �� ֵ  : ��
 �޸���ʷ     :
  1.��    ��   : 2019��03��03��
    ��    ��   : ΢Ц����
    �޸�����   : ����
*****************************************************************************/
void mem_set(INT8U *_s, INT8U _ch, INT16U _len)
{
    while(_len--)
    {
        *(_s++) = _ch;
    }
}


/*****************************************************************************
 �� �� ��  : memcmp
 ��������  : �Ƚ�_s1��_s2ָ���_len�ֽ������Ƿ���ͬ����ͬ����1�����򷵻�0
 �������  : *_s1    �ַ���1
                *_s2    �ַ���2
                     _len    ����
 �������  : ��
 �� �� ֵ: ��
 �޸���ʷ    :
  1.��    ��   : 2019��03��03��
    ��    ��   : ΢Ц����
    �޸�����   : ����
*****************************************************************************/
INT8U mem_cmp(const INT8U *_s1, const INT8U *_s2, INT16U _len)
{
    while(_len--)
    {
        if(*(_s1++) != *(_s2++) )
        {
            return(0);
        }
    }
    return(1);
}

/*****************************************************************************
 �� �� ��  : memmove
 ��������  : ��_srcָ���_len�ֽ������ƶ���_dstָ����ڴ�
 �������  : *_dst   Ŀ���ַ
                *_src   Դ��ַ
                     _len    ����
 �������  : ��
 �� �� ֵ: ��
 �޸���ʷ    :
  1.��    ��   : 2019��03��03��
    ��    ��   : ΢Ц����
    �޸�����   : ����
*****************************************************************************/
void mem_move(INT8U *_dst, INT8U *_src, INT16U _len)
{
    INT8U *psrc,*pdst;
    
    if (_len == 0)
    {
        return;
    }

    psrc = _src;
    pdst = _dst;
    if( (_dst <= psrc) || (pdst >= psrc + _len) ) //����Ƿ����ص�����
    {
        while(_len--) //���򿽱�
        {
            *pdst = *psrc;
            psrc++;
            pdst++;
        }
    }
    else //���򿽱�
    {
        psrc += _len;
        pdst += _len;
        while(_len--)
        {
            psrc--;
            pdst--;
            *pdst = *psrc;
        }
    }
}


/*****************************************************************************
 �� �� ��  : memcmp_data
 ��������  : �Ƚ�_s1ָ���_len�ֽ������Ƿ���_ch��ͬ����ͬ����1�����򷵻�0
 �������  : *_s1    �ַ���1
                 _ch     �ַ�
                        _len    ����
 �������  : ��
 �� �� ֵ: ��
 �޸���ʷ    :
  1.��    ��   : 2019��03��03��
    ��    ��   : ΢Ц����
    �޸�����   : ����
*****************************************************************************/
INT8U memcmp_data(const INT8U *_s1, const INT8U _ch, INT16U _len)
{
    while(_len--)
    {
        if(*(_s1++) != _ch )
        {
            return(0);
        }
    }
    return(1);
}


/*****************************************************************************
 �� �� ��  : mem_invert
 ��������  : ���ֽڷ�תһ���ڴ�
 �������  : INT8U _b[]  
           INT8U _n    
 �������  : ��
 �� �� ֵ: 
 �޸���ʷ    :
  1.��    ��   : 2018��12��25��
    ��    ��   : ΢Ц����
    �޸�����   : ����
*****************************************************************************/
void mem_invert(INT8U _b[],  INT8U _n)
{
    INT8U i=0,j=_n-1,t;
    while(i<j)
    {
        t=_b[i];
        _b[i]=_b[j];
        _b[j]=t;
        i++;
        j--;
    }
}

/*****************************************************************************
 �� �� ��  : mem_check_sum
 ��������  : ��У��
 �������  : INT8U _b[]  
           INT8U _len    
 �������  : ��
 �� �� ֵ: 
 �޸���ʷ    :
  1.��    ��   : 2018��12��25��
    ��    ��   : ΢Ц����
    �޸�����   : ����
*****************************************************************************/
INT8U mem_check_sum(INT8U *_buff, INT16U _len)
{
    INT16U i = 0;
    INT8U  sum = 0;

    for (i=0; i<_len; i++)
    {
        sum += _buff[i];
    }
    return sum;
}

/*****************************************************************************
 �� �� ��: mem_check_xor
 ��������  : ���У��
 �������  : INT8U _buff  
           INT8U _len    
 �������  : ��
 �� �� ֵ  : 
 �޸���ʷ      :
  1.��    ��   : 2018��12��25��
    ��    ��   : ΢Ц����
    �޸�����   : ����
*****************************************************************************/
INT8U mem_check_xor(INT8U *_buff, INT8U _len)
{
    INT8U i = 0;
    INT8U  xor;

    xor = _buff[0];
    
    for (i=1; i<_len; i++)
    {
        xor ^= _buff[i];
    }
    return xor;
}

/*****************************************************************************
 �� �� ��  : mem_dec2bcd
 ��������  : DEC to BCD
 �������  : INT8U _dat      
 �������  : ��
 �� �� ֵ  : 
 �޸���ʷ      :
  1.��    ��   : 2018��12��25��
    ��    ��   : ΢Ц����
    �޸�����   : ����
*****************************************************************************/
INT8U mem_dec2bcd(INT8U _dat)
{
    INT8U tmp;
    
    if(_dat > 0x99)
    {
        return 0xFF;
    }
    
    tmp = (_dat/10)<<4 | (_dat%10);
    
    return tmp;
}

/*****************************************************************************
 �� �� ��  : mem_dec2bcd
 ��������  : DEC to BCD
 �������  : INT8U _dat     
 �������  : ��
 �� �� ֵ  : 
 �޸���ʷ      :
  1.��    ��   : 2018��12��25��
    ��    ��   : ΢Ц����
    �޸�����   : ����
*****************************************************************************/
INT8U mem_bcd2hex(INT8U _dat)
{
    INT8U tmp;
   
    tmp = ((_dat>>4) *10) + (_dat&0x0F);
    
    return tmp;
}


